ใช้ DynamoDB บันทึกข้อมูลจาก Lambda : Serverless Web App บน AWS : Part 3

ใช้ DynamoDB บันทึกข้อมูลจาก Lambda : Serverless Web App บน AWS : Part 3

เก็บข้อมูลว่าแปลอะไรลงไปบ้าง ลงใน dynamoDB กันครับ
Clock Icon2024.11.11

บทความนี้ดัดแปลงเนื้อหาบางส่วนมาจาก Hands-on Training ของ Website AWS Official ของญี่ปุ่น สามารถอ่านเนื้อหาต้นฉบับได้ที่ AWS Hands-on for Beginners Serverless #1 サーバーレスアーキテクチャで翻訳 Web API を構築する | AWS Webinar

บทความนี้เป็นส่วนนึงของเนื้อหาในบทเรียนเกี่ยวกับ AWS API Gateway ที่ผมสร้างขึ้นมา คุณผู้อ่านสามารถตรวจสอบเนื้อหาทั้งหมดได้โดยการคลิกที่ชื่อของผม

เป้าหมายใหญ่สุดของบทเรียนนี้คือ การทำ Web app แปลภาษาที่เป็น serverless ครับ

สวัสดีครับ ต้า ครับ

บทความนี้เป็นส่วนนึงของเนื้อหาในบทเรียนเกี่ยวกับ AWS API Gateway ที่ผมสร้างขึ้นมา
ซึ่งผมทำการแยกย่อยๆออกมาโดยเนื้อหาในบทความพวกนี้สามารถจบได้ในตัวของมันเอง

สำหรับหัวข้ออื่นๆ ของบทความนี้ สามารถตรวจสอบได้ที่ช่วงท้ายของบทความครับ

สำหรับบทความนี้เราจะมาทำกันในส่วนนี้ครับ

Hands-On-for-Beginners_2022_Serverless1_0819_v1_part3

จะเป็นเกี่ยวกับการเก็บข้อมูลที่เราทำการแปล ว่าแปลอะไรลงไปบ้าง ลงใน dynamoDB กันครับ

บทความนี้เราจะมาทำกันใน Singapore Region กันครับ

เริ่มลงมือทำ

สร้าง DynamoDB

คลิกลิ้งค์ด้านล่าง เพิ่มเข้าสู่หน้าต่างสร้าง Table ของ DynamoDB

Create table

ตั้งค่าดังต่อไปนี้

Table name: translate-log
Partition key: timestamp, String
Table settings: Customize settings
Capacity mode: On-demand

การเลือกแบบ On-demand จะเป็นการคิดค่าใช้จ่ายแค่ตอนที่มีการใช้งานเท่านั้น ซึ่งจะช่วยลดค่าใช้จ่ายได้ในกรณีนี้

หลังจากนั้นกด Create table

Screenshot 2024-09-27 164728

Screenshot 2024-09-27 164729

กลับมาที่ Lambda

คราวนี้เราจะมาแก้ไขให้ข้อมูลที่ Lambda ขอจาก AWS Translate ให้ส่งไปเก็บที่ DynamoDB
โดยก่อนอื่นเราต้องเข้าไปแก้ Role ของ Lambda ให้สามารถใช้งาน DynamoDB กันก่อนครับ

จากวิธีนี้

Monosnap translate-function _ Functions _ Lambda -

กด Add permissions > Attach policies > ☑AmazonDynamoDBFullAccess > Add permissions

เราสามารถจำกัดสิทธิ์ให้มีความสามารถเท่าที่จำเป็นได้ แต่เพื่อความสะดวก ในบทความนี้จึงขอใช้เป็น FullAccess ไปก่อน

ถ้าได้ตามภาพด้านล่างนี้คือโอเคครับ

Screenshot 2024-09-17 145631

จากนั้นเราทำแก้โค้ดใน Lambda ของเราตามนี้ครับ

จากนั้นกด Deploy

import json
import boto3
# Library เกี่ยวกับเวลา
import datetime 

translate = boto3.client(service_name='translate') 

# ข้อมูล table ของ dynamoDB
dynamodb_translate_log_tbl = boto3.resource('dynamodb').Table('translate-log') #

def lambda_handler(event, context):

    input_text = event['queryStringParameters']['input_text'] # รับข้อมูลจาก Event JSON

    response = translate.translate_text(
        Text=input_text,
        SourceLanguageCode="th",
        TargetLanguageCode="en"
    )

    output_text = response.get('TranslatedText')

    # ส่งข้อมูลไปยัง dynamoDB table ที่เราสร้างขึ้น
    dynamodb_translate_log_tbl.put_item(
        Item = {
            'timestamp': datetime.datetime.now().strftime("%d-%m-%Y %H:%M:%S"),
            'input_text': input_text,
            'output_text': output_text
        }
    )

    return {
        'statusCode': 200,
        'body': json.dumps({
            'output_text': output_text
        }),
        'isBase64Encoded': False,
        'headers': {}
    }

จากนั้นให้เราลองทำการทดสอบ แปลภาษาดู

กด Test (Ctrl+Shift+I) -> test_proxy

translate7

translate8

จากไปที่หน้าต่าง DynamoDB Console แล้วไปกดที่หัวข้อ Explore items ที่อยู่ด้านซ้าย
หรือสามารถเข้าไปได้จากการกดลิ้งค์ด้านล่าง

DynamoDB Explore items

ให้เรากด Tables ที่เราสร้างขึ้น

จะเห็นได้ว่ามีข้อมูลถูกเข้ามาเก็บแล้ว

Monosnap translate-function _ Functions _ Lambda -11111

ซึ่งสำหรับ Basic ในการทำความเข้าใจ API Gateway ก็มีเท่านี้ครับ ต่อจากนี้จะเป็นการดัดแปลงต่อในขั้น Advance

ทิ้งท้าย

ในบทความนี้ เราทำความเข้าใจคร่าวๆเกี่ยวกับ DynamoDB ว่ามีการทำงานยังไงผ่านการการเอาข้อมูลที่เราทำการค้นหาไปเก็บไว้ใน DynamoDB
ในพาร์ทต่อไปเราจะมาทำการแก้ไขโค้ดใน Lambda นิดหน่อย เพื่อแก้ปัญหาในการแปลภาษากันครับ

กรุณาอดใจรอพาร์ทต่อไปในเร็วๆนี้ครับ

บทความ Part อื่นๆ

บทความอ้างอิง

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.